/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package gestInt.controlador;

import gestInt.DAO.ProfesorJpaController;
import gestInt.DAO.exceptions.NonexistentEntityException;
import gestInt.DAO.exceptions.RollbackFailureException;
import gestInt.modelo.Profesor;
import gestInt.modelo.ProfesorPK;
import java.io.IOException;
import javax.inject.Named;
import javax.enterprise.context.SessionScoped;
import java.io.Serializable;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.annotation.Resource;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.transaction.UserTransaction;
import org.primefaces.context.RequestContext;

/**
 *
 * @author elkin
 */
@Named(value = "profesorController")
@SessionScoped
public class ProfesorController implements Serializable {

    @Resource
    private UserTransaction utx;

    private Profesor objProfesor;
    private final ProfesorJpaController jpaProfesor;
    private List<Profesor> lstProfesores;
    boolean encontrado;
    
    /**
     * Creates a new instance of ProfesorController
     */
    public ProfesorController() {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("GestIntPU");
        this.objProfesor = new Profesor();
        this.jpaProfesor = new ProfesorJpaController(utx, emf);
        this.encontrado = false;
        this.lstProfesores = this.jpaProfesor.findProfesorEntities();
    }
    
    public void registrarProfesor() {
        
        for (Profesor profesor : lstProfesores) {
            int codigo1 = this.objProfesor.getProfesorPK().getCodigo();
            int codigo2 = profesor.getProfesorPK().getCodigo();
            if (codigo1 == codigo2) {
                this.encontrado = true;
            }
        }

        if (!this.encontrado) {
            try {
                this.jpaProfesor.create(objProfesor);
            } catch (RollbackFailureException ex) {
                Logger.getLogger(ProfesorController.class.getName()).log(Level.SEVERE, null, ex);
            } catch (Exception ex) {
                Logger.getLogger(ProfesorController.class.getName()).log(Level.SEVERE, null, ex);
            }
            
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,
                    "Registro exitoso", null));
        } else {
            this.encontrado = false;
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,
                    "El codigo suministrado ya ha sido registrado", null));
        }

    }

    public void eliminarProfesor() {

        ProfesorPK idEliminar = this.objProfesor.getProfesorPK();
        try {
            this.jpaProfesor.destroy(idEliminar);
        } catch (RollbackFailureException ex) {
            Logger.getLogger(ProfesorController.class.getName()).log(Level.SEVERE, null, ex);
        } catch (Exception ex) {
            Logger.getLogger(ProfesorController.class.getName()).log(Level.SEVERE, null, ex);
        }
        try {
            FacesContext.getCurrentInstance().getExternalContext().redirect("");
        } catch (IOException ex) {
            Logger.getLogger(ProfesorController.class.getName()).log(Level.SEVERE, null, ex);
        }
        
    }

    public void editarProfesor() {

        try {
            this.jpaProfesor.edit(this.objProfesor);
        } catch (RollbackFailureException ex) {
            Logger.getLogger(ProfesorController.class.getName()).log(Level.SEVERE, null, ex);
        } catch (Exception ex) {
            Logger.getLogger(ProfesorController.class.getName()).log(Level.SEVERE, null, ex);
        }
        
    }

    public void limpiar() {
        System.out.println("en limpiar");
        RequestContext.getCurrentInstance().reset("form:panel");
    }

    public void limpiarObjProfesor() {

    }

    public List<Profesor> getLstProfesores() {
        return lstProfesores;
    }

    public void setLstProfesores(List<Profesor> lstProfesores) {
        this.lstProfesores = lstProfesores;
    }
    
}

